home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / program / pdmake.arc / H.H < prev    next >
C/C++ Source or Header  |  1986-12-14  |  4KB  |  200 lines

  1.     /***************************************************************\
  2.     *                                *
  3.     *  PDMAKE, Atari ST version                    *
  4.     *                                *
  5.     *  Adapted from mod.sources Vol 7 Issue 71, 1986-12-03.        *
  6.     *                                *
  7.     *  This port makes extensive use of the original net.sources    *
  8.     *  port by Jwahar Bammi.                    *
  9.     *                                *
  10.     *      Ton van Overbeek                        *
  11.     *      Email: TPC862@ESTEC.BITNET                *
  12.     *             TPC862%ESTEC.BITNET@WISCVM.WISC.EDU    (ARPA)    *
  13.     *             ...!mcvax!tpc862%estec.bitnet   (UUCP Europe)    *
  14.     *             ...!ucbvax!tpc862%estec.bitnet  (UUCP U.S.A.)    *
  15.     *             71450,3537  (CompuServe)                *
  16.     *                                *
  17.     \***************************************************************/
  18.  
  19. /*
  20.  *    Include header for make
  21.  */
  22.  
  23.  
  24. #ifdef atarist
  25. #define ATARIST
  26. #endif
  27.  
  28. #ifdef ATARIST
  29.  
  30. #include <osbind.h>
  31. #include "decl.h"
  32.  
  33. /* #define MEGRULES    */    /* Define if default .c.o rule is to be
  34.                  * generated to use the Megamax C Compiler
  35.                  */
  36.  
  37. /* #define MEGAMAX    */    /* If using Megamax C to compile Make
  38.                  * This symbol has NO relation to the
  39.                  * symbol MEGRULES
  40.                  */
  41.  
  42. #ifdef MEGAMAX
  43. #undef Fdatime            /* Megamax has it incorrectly defined */
  44. #define Fdatime(a,b,c)    gemdos(0x57,a,b,c)
  45. #endif /* MEGAMAX */
  46.  
  47. #ifdef TRUE
  48. #undef TRUE
  49. #endif
  50.  
  51. #ifdef FALSE
  52. #undef FALSE
  53. #endif
  54.  
  55. #ifdef uchar
  56. #undef uchar
  57. #endif
  58.  
  59. #ifdef NULL
  60. #undef NULL
  61. #endif
  62. #define NULL    0L
  63.  
  64. #ifdef max
  65. #undef max
  66. #endif
  67.  
  68. #endif /* ATARIST */
  69.  
  70. #ifndef uchar
  71. #ifdef os9
  72. #define uchar    char
  73. #define void    int
  74. #define fputc    putc
  75. #endif
  76. #ifdef ATARIST
  77. #define uchar    char
  78. #define void    int
  79. #endif
  80. #ifndef uchar
  81. #define uchar    unsigned char
  82. #endif
  83. #endif
  84.  
  85. #define bool        uchar
  86. #define time_t        long
  87. #define TRUE        (1)
  88. #define FALSE        (0)
  89. #define max(a,b)    ((a)>(b)?(a):(b))
  90.  
  91. #define DEFN1    "makefile"        /*  Default names  */
  92. #ifdef unix
  93. #define DEFN2    "Makefile"
  94. #endif
  95. #ifdef eon
  96. #define DEFN2    "Makefile"
  97. #endif
  98. /* os9 and Atari ST are case insensitive */
  99.  
  100. #define LZ    (1024)            /*  Line size  */
  101.  
  102.  
  103.  
  104. /*
  105.  *    A name.  This represents a file, either to be made, or existant
  106.  */
  107.  
  108. struct name
  109. {
  110.     struct name *    n_next;        /* Next in the list of names */
  111.     char *        n_name;        /* Called */
  112.     struct line *    n_line;        /* Dependencies */
  113.     time_t        n_time;        /* Modify time of this name */
  114.     uchar        n_flag;        /* Info about the name */
  115. };
  116.  
  117. #define N_MARK        0x01        /* For cycle check */
  118. #define N_DONE        0x02        /* Name looked at */
  119. #define N_TARG        0x04        /* Name is a target */
  120. #define N_PREC        0x08        /* Target is precious */
  121. #define N_DOUBLE    0x10        /* Double colon target */
  122.  
  123. /*
  124.  *    Definition of a target line.
  125.  */
  126. struct line
  127. {
  128.     struct line *    l_next;        /* Next line (for ::) */
  129.     struct depend *    l_dep;        /* Dependents for this line */
  130.     struct cmd *    l_cmd;        /* Commands for this line */
  131. };
  132.  
  133.  
  134. /*
  135.  *    List of dependents for a line
  136.  */
  137. struct depend
  138. {
  139.     struct depend *    d_next;        /* Next dependent */
  140.     struct name *    d_name;        /* Name of dependent */
  141. };
  142.  
  143.  
  144. /*
  145.  *    Commands for a line
  146.  */
  147. struct cmd
  148. {
  149.     struct cmd *    c_next;        /* Next command line */
  150.     char *        c_cmd;        /* Command line */
  151. };
  152.  
  153.  
  154. /*
  155.  *    Macro storage
  156.  */
  157. struct macro
  158. {
  159.     struct macro *    m_next;        /* Next variable */
  160.     char *        m_name;        /* Called ... */
  161.     char *        m_val;        /* Its value */
  162.     uchar        m_flag;        /* Infinite loop check */
  163. };
  164.  
  165. extern char *        myname;
  166. extern struct name    namehead;
  167. extern struct macro *    macrohead;
  168. extern struct name *    firstname;
  169. extern bool    silent;
  170. extern bool    ignore;
  171. extern bool    rules;
  172. extern bool    dotouch;
  173. extern bool    quest;
  174. extern bool    domake;
  175. extern char    str1[];
  176. extern char    str2[];
  177. extern int    lineno;
  178.  
  179. char *        fgets();
  180. char *        index();
  181. char *        rindex();
  182. char *        malloc();
  183. extern int    errno;
  184.  
  185. char *        getmacro();
  186. struct macro *    setmacro();
  187. void        input();
  188. void        error();
  189. void        fatal();
  190. int        make();
  191. struct name *        newname();
  192. struct depend *        newdep();
  193. struct cmd *        newcmd();
  194. void        newline();
  195. char *        suffix();
  196. void        touch();
  197. void        makerules();
  198. char *        gettok();
  199. void        precious();
  200.